package com.hoas.api.encrypt.type;

import org.apache.commons.codec.digest.DigestUtils;

import java.io.UnsupportedEncodingException;
import java.security.SignatureException;

/**
 * <MD5签名工具类>
 * <功能详细描述>
 * 
 * @author  kaylves
 * @version  [版本号, 2015年11月13日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class MD5
{

    /**
     * <md5签名>
     * <功能详细描述>
     * @param text              待签名字符串
     * @param key               密钥
     * @param input_charset     签名编码格式
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static String sign( String text, String key, String input_charset )
    {
        text = text + key;
        return DigestUtils.md5Hex( getContentBytes( text, input_charset ) );
    }

    /**
     * <根据给定的参数验证签名是否正确>
     * <功能详细描述>
     * @param text  待签名的字符串
     * @param sign  传入的签名
     * @param key
     * @param input_charset
     * @return [参数说明]
     * 
     * @return boolean [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static boolean verify( String text, String sign, String key,String input_charset )
    {
        text = text + key;
        String mysign = DigestUtils.md5Hex( getContentBytes( text,input_charset ) );
        if ( mysign.equals( sign ) )
        {
            return true;
        } else
        {
            return false;
        }
    }

    /**
     * @param content
     * @param charset
     * @return
     * @throws SignatureException
     * @throws UnsupportedEncodingException
     */
    private static byte[] getContentBytes( String content, String charset )
    {
        try
        {
            if ( charset == null || "".equals( charset ) )
            {
                charset = "utf-8";
            }
            
            return content.getBytes( charset );
        } catch ( UnsupportedEncodingException e )
        {
            throw new RuntimeException( "MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:"+ charset );
        }
    }

}